package com.mall.b2c.hessian;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;

import com.mall.b2c.bean.PayInfo;
import com.mall.common.hessian.BaseHessian;

public interface TradeHessian extends BaseHessian {

	/**
	 * 收支明细分页查询
	 * @param memberId 会员id
	 * @param startDate 起始时间
	 * @param endDate 结束时间
	 * @param detailType 明细类型
	 * @param pagerNumber 页码
	 * @return
	 */
	String getPaymentDetailPager(Long memberId, Date startDate, Date endDate, Integer detailType, Integer pagerNumber);

	/**
	 * 收支明细汇总
	 * @param memberId 会员id
	 * @param isIncome 是否收入
	 * @param startDate 起始时间
	 * @param endDate 结束时间
	 * @return
	 */
	BigDecimal getPaymentSummarize(Long memberId, Boolean isIncome, Date startDate, Date endDate);

	/**
	 * 订单分页查询
	 * @param keyword 订单编号
	 * @param memberId 会员id
	 * @param startDate 起始时间
	 * @param endDate 结束时间
	 * @param orderStatus 订单状态
	 * @param pagerNumber 页码
	 * @return
	 */
	String getOrderPager(String keyword, Long memberId, Date startDate, Date endDate, Integer orderStatus, Integer pagerNumber);

	/**
	 * 获取配送方式
	 * @param receiverId 收货地址
	 * @param memberId 会员id
	 * @param weight 重量
	 * @return
	 */
	String getDeliveryMethods(Long receiverId, Long memberId, BigDecimal weight);

	/**
	 * 校验购物车项
	 * @param memberId 会员id
	 * @param cartItems 购物车项id
	 * @return
	 */
	String checkCartItems(Long memberId, Long[] cartItems);
	String checkCartItems2(Long memberId, Long[] cartItems);

	/**
	 * 生成订单
	 * @param memberId 会员id
	 * @param cartItemIds 购物车项Id
	 * @param payType 付款方式
	 * @param receiverId 收货地址id
	 * @param deliveryMethodId 配送方式id
	 * @param postscript 附言
	 * @param isInvoice 是否开票
	 * @param invoiceType 发票类型
	 * @param invoiceTitle 抬头
	 * @return 订单编号
	 */
	String createOrder(Long storeId, Long memberId, Long[] cartItemIds,
					   Integer payType, Long receiverId, Long deliveryMethodId,
					   String postscript, Boolean isInvoice, Integer invoiceType,
					   String invoiceTitle);

	/**
	 * 立即购买检查
	 * @param goodsId
	 * @param num
	 * @return
	 */
	String checkGoods(Long memberId, Long goodsId, Integer num);

	/**
	 * 立即购买
	 * @param memberId 会员id
	 * @param goodsId 商品id
	 * @param num 数量
	 * @param payType 付款方式
	 * @param receiverId 收货地址id
	 * @param deliveryMethodId 配送方式id
	 * @param postscript 附言
	 * @param isInvoice 是否开票
	 * @param invoiceType 发票类型
	 * @param invoiceTitle 抬头
	 * @return 订单编号
	 */
	String buyNow(Long storeId, Long memberId, Long goodsId, Integer num,
				  Integer payType, Long receiverId, Long deliveryMethodId,
				  String postscript, Boolean isInvoice, Integer invoiceType,
				  String invoiceTitle);

	/**
	 * 获取订单信息
	 * @param memberId 会员id
	 * @param orderNo 订单编号
	 * @return
	 */
	String getOrderInfo(Long memberId, String orderNo);

	/**
	 * 获取付款信息
	 * @param memberId 会员id
	 * @param orderNo 订单编号
	 * @return
	 */
	String getPayInfo(Long memberId, String orderNo);

	/**
	 * 验证付款信息
	 * @param payInfo 付款信息
	 * @return
	 */
	String checkPayInfo(PayInfo payInfo);

	/**
	 * 订单支付
	 * @param memberId 会员id
	 * @param params 付款参数
	 * @return
	 * @exception
	 */
	String pay(Long memberId, Map<String, String> params) throws Exception;

	/**
	 * 获取购物车信息
	 * @param memberId 会员id
	 * @param key cookie购物车key
	 * @param withItem 是否包含购物车项
	 * @return
	 */
	String getCartItemInfo(Long memberId, String key, boolean withItem);

	/**
	 * 获取购物车项列表
	 * @param memberId 会员id
	 * @param itemIds 购物车项id
	 * @return
	 */
	String getCartItemList(Long memberId, Long[] itemIds);
	String getShopCartItemList(Long memberId, Long[] itemIds);

	/**
	 * 加入购物车
	 * @param memberId 会员id
	 * @param key cookie购物车key
	 * @param goodsId 商品id
	 * @param quantity 数量
	 * @return
	 */
	String addCartItem(Long memberId, String key, Long goodsId, Integer quantity);

	/**
	 * 加入积分购物车
	 * @param memberId
	 * @param key
	 * @param id
	 * @param quantity
	 * @return
	 */
	String addCartItem2(Long memberId, String key, Long id, Integer quantity);

	/**
	 * 批量加入购物车
	 * @param memberId 会员id
	 * @param goodsIds 商品id
	 * @return
	 */
	String batchAddCartItem(Long memberId, Long[] goodsIds);

	/**
	 * 修改购物车项
	 * @param memberId 会员id
	 * @param cartItemId 购物车项id
	 * @param quantity 数量
	 */
	void modifyCartItem(Long memberId, Long cartItemId, Integer quantity);

	/**
	 * 修改积分购物车项
	 * @param memberId
	 * @param cartItemId
	 * @param quantity
	 */
	void modifyCartItem2(Long memberId, Long cartItemId, Integer quantity);

	/**
	 * 删除购物车项
	 * @param memberId 会员id
	 * @param cartItemIds 购物车项Id
	 * @return
	 */
	String deleteCartItems(Long memberId, Long[] cartItemIds);

	/***
	 * 删除积分购物车项
	 * @param memberId
	 * @param cartItemIds
	 * @return
	 */
	String deleteCartItems2(Long memberId, Long[] cartItemIds);

	/**
	 * 取消订单
	 * @param memberId
	 * @param orderNo
	 * @return
	 */
	void cancelOrder(Long memberId, String orderNo);

	/**
	 * 删除订单
	 * @param memberId
	 * @param orderNo
	 */
	void deleteOrder(Long memberId, String orderNo);

	/**
	 * 确认收货
	 * @param memberId
	 * @param orderNo
	 */
	void confirmReceive(Long memberId, String orderNo);

	/**
	 * 获取最近订单列表
	 * @param memberId
	 * @param count
	 * @return
	 */
	String findOrderList(Long memberId, Integer count);

	/**
	 * 获取相应订单状态订单数量
	 * @param memberId
	 * @param orderStatus
	 * @return
	 */
	Long orderCount(Long memberId, String orderStatus);

	/**
	 * 查找订单日志信息
	 * @param memberId
	 * @param orderNo
	 * @return
	 */
	String findOrderLogs(Long memberId, String orderNo);
}
